package com.andnnl.pool;

import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.BiConsumer;
import java.util.function.Consumer;

/**
 * Created by chenss on 2021/6/25.
 */
public interface IUser<T> {
    /**
     * 获取一批消息
     *
     * @return
     */
    List<Msg<T>> takeMsg();

    /**
     * 队列是否为空
     *
     * @return
     */
    boolean isAllEmpty();

    /**
     * 添加消息
     *
     * @param msg
     */
    void addMsg(Msg<T> msg);


    String getName();

    void setName(String name);

    /**
     * 队列中还有多少Msg对象
     *
     * @return
     */
    int getTotalSize();

    /**
     * 统计队列中，所有的msg.dataSize
     * @return
     */
    int getTotalDataSize();

    /**
     * 当前用户每次获取的批量数
     * @return
     */
    int getBatchSize();

    /**
     * 设置当前用户每次获取的批量数
     *
     * @param batchSize
     */
    void setBatchSize(int batchSize);

    AtomicBoolean getInQueue();

    /**
     * 重置当前时间
     * 每用一次都要重置
     */
    void resetCurrTime();

    /**
     * 获取当前时间
     *
     * @return
     */
    long getCurrTime();

    /**
     * 是否暂停忽略处理当前用户的数据
     *
     * @return
     */
    boolean isPause();

    /**
     * 暂停忽略处理当前用户的数据
     *
     * @return
     */
    void pause();

    /**
     * 恢复处理当前用户的数据
     */
    void resume();


    /**
     * 设置恢复回调函数，当恢复时，重新把用户加入队列
     *
     * @param resumeCallBack
     */
    void setResumeCallBack(Consumer<IUser<T>> resumeCallBack);
}
